!> 读取幅值曲线数据模块
module amplitude_reader_mod
    use iso_fortran_env ,only: real64
    implicit none
contains
    !> 给定txt路径, 加载幅值曲线数据点, 返回一个real64数组,大小为(4,时间点数,曲线数)
    !> 四个变量分别是时间点,A(t),dA/dt(t),d²A/dt²(t)
subroutine load_amplitude_dy(amp_filepath,amplitude_array,curve_num,iostat)
        character(len=256),intent(in)           :: amp_filepath
        real(real64),allocatable,intent(out)    :: amplitude_array(:,:,:)
        integer,intent(out)                     :: iostat
        integer,intent(out)                     :: curve_num            ! 曲线数量
        integer                                 :: time_points_num      ! 每个曲线的时间点数量
        integer, parameter                      :: values_per_point=4   ! 每个时间点的数据值数量
        integer                                 :: j, k, unit
        ! 打开文件
        open(newunit=unit, file=amp_filepath, status='old', action='read', iostat=iostat)
        if (iostat /= 0) then
            print *, "can not open file :",amp_filepath
            stop
        end if
        
        ! 读取曲线尺寸数据
        read(unit,*) time_points_num, curve_num
        ! 初始化数组
        allocate(amplitude_array(values_per_point, time_points_num, curve_num))
        amplitude_array= 0.0_real64
        
        ! 读取3条曲线的数据
        do k = 1, curve_num
            ! 读取当前曲线的11个时间点数据
            do j = 1, time_points_num
                read(unit,*, iostat=iostat) amplitude_array(1, j, k), amplitude_array(2, j, k), &
                                            amplitude_array(3, j, k), amplitude_array(4, j, k)
                if (iostat /= 0) then
                    print *, "error! when reading curve-", k, " , at time point-", j
                    stop
                end if
            end do
        end do
        ! 关闭文件
        close(unit)
        iostat=0
    end subroutine load_amplitude_dy
end module amplitude_reader_mod